package com.umfb.bootstrap.commons;

import com.github.pagehelper.PageInfo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by gzheng on 17-11-16.
 */
public class ResponseResult implements Serializable {

    private static final long serialVersionUID = 6811200139383949814L;
    //根据接口要求文档，对返回信息进行包装，返回状态为suc或err + 错误编码
    public static final String STATE_ERR = "err";
    public static final String STATE_SUC = "suc";

    private String msg   = "";
    private String state = STATE_SUC;
    private String errCode = "0";
    private Map<String, Object> result = new HashMap<>();

    public String getState() {
        return state;
    }

    public void setState(String stat) {
        this.state = stat;
    }
    /**
     * @Description： 设置接口调用失败错误信息。
     * @MethodName setErrorState
     * @param err
     */
    public void setErrorState(ErrorCode err){
        this.state = STATE_ERR;
        this.msg   = err.getErrMsg();
        this.errCode = "" + err.getValue();
        this.result.clear();//清空数据
    }

    /**
     * @Description： 设置分页查询相关属性。
     * @MethodName setPageInfo
     * @param pageInfo
     */
    public void setPageInfo(PageInfo<Map<String, Object>> pageInfo) {
        this.setresultList(pageInfo.getList());
        this.putResult(Params.pageNum,  "" + pageInfo.getPageNum());
        this.putResult(Params.total, "" + pageInfo.getTotal());
    }
    public void setresultList(List<Map<String, Object>> result) {
        this.result.put(Params.list, result);
    }
    /**
     *
     * @Title: setEntityList
     * @Description: 设置返回beanList格式数据
     * @param result
     * @return void    返回类型
     * @date 2017年5月8日 下午5:38:50
     */
    public <T> void setEntityList(List<T> result) {
        this.result.put(Params.list, result);
    }

    public void setResultMap(Map<String, Object> result) {
        this.result.put(Params.dataDict, result);
    }

    public void setResultBean(Object result) {
        this.result.put(Params.dataDict, result);

    }
    /**
     * Description:  向 list 中添加一个元素。 建议只添加一个元素时使用，添加多个元素时使用setresultList。
     * @MethodName: addresultList
     * @param result
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public void addResultList(Map<String, Object> result) {
        boolean isList = this.result.get(Params.list) instanceof List;
        if(!isList){
            this.result.put(Params.list, new ArrayList<Object>());
        }

        ((List) this.result.get(Params.list)).add(result);
    }

    /**
     * @Description： 向result中添加一个元素。
     * @MethodName putresult
     * @param key
     * @param value
     */
    public void putResult(String key, Object value) {
        this.result.put(key, value);
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getresult() {
        return result;
    }
    public Object getresult(String key) {
        return result.get(key);
    }
    public void clearResult() {
        result.clear();
    }
    public String getErrCode() {
        return errCode;
    }

    public void setErrCode(String errCode) {
        this.errCode = errCode;
    }

}
